package com.zenithmind.gateway.context;

import org.springframework.http.server.reactive.ServerHttpRequest;

/**
 * 请求上下文管理器接口
 * 遵循迪米特法则：封装请求上下文的管理逻辑
 * 遵循单一职责原则：只负责请求上下文的管理
 */
public interface RequestContextManager {
    
    /**
     * 创建请求上下文
     * @param request HTTP请求
     * @return 请求上下文
     */
    RequestContext createContext(ServerHttpRequest request);
    
    /**
     * 获取当前请求上下文
     * @return 请求上下文，如果不存在则返回null
     */
    RequestContext getCurrentContext();
    
    /**
     * 设置当前请求上下文
     * @param context 请求上下文
     */
    void setCurrentContext(RequestContext context);
    
    /**
     * 清除当前请求上下文
     */
    void clearCurrentContext();
    
    /**
     * 请求上下文接口
     */
    interface RequestContext {
        String getRequestId();
        String getPath();
        String getMethod();
        String getUserId();
        String getRemoteAddress();
        String getTargetService();
        long getStartTime();
        
        void setUserId(String userId);
        void setTargetService(String targetService);
    }
}
